package nccloud.test;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;

public class Base64PdfConverter {
    public static void main(String[] args) {
        // 源PDF文件路径
        String sourceFilePath = "F:\\yonyou\\202507081642457538411B020.PDF";
        // 目标PDF文件路径 (E盘)
        String targetFilePath = "E:\\202507081642457538411B020.PDF";

        try {
            // 将PDF文件转换为Base64字符串
            String base64String = imageToBase64(sourceFilePath);
            System.out.println("PDF文件已转换为Base64字符串");

            // 将Base64字符串转换回PDF文件并保存
            base64ToPdf(base64String, targetFilePath);
            System.out.println("Base64字符串已转换为PDF文件，保存路径：" + targetFilePath);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 将文件转换为Base64字符串
     * @param filePath 文件路径
     * @return Base64字符串
     * @throws IOException 可能的IO异常
     */
    public static String imageToBase64(String filePath) throws IOException {
        // 读取文件内容为字节数组
        byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
        // 转换为Base64字符串
        return Base64.getEncoder().encodeToString(fileContent);
    }

    /**
     * 将Base64字符串转换为PDF文件并保存
     * @param base64String Base64字符串
     * @param filePath 保存文件路径
     * @throws IOException 可能的IO异常
     */
    public static void base64ToPdf(String base64String, String filePath) throws IOException {
        // 解码Base64字符串为字节数组
        byte[] decodedBytes = Base64.getDecoder().decode(base64String);

        // 创建父目录（如果不存在）
        File file = new File(filePath);
        if (file.getParentFile() != null) {
            file.getParentFile().mkdirs();
        }

        // 将字节数组写入文件
        try (FileOutputStream fos = new FileOutputStream(filePath)) {
            fos.write(decodedBytes);
        }
    }
}

